<?php

class CurlHeaderResponse
{
	const HTTP_STATUS_CONTINUE = 100; //The request can be continued.
	const HTTP_STATUS_SWITCH_PROTOCOLS = 101; //The server has switched protocols in an upgrade header.
	const HTTP_STATUS_OK = 200; //The request completed successfully.
	const HTTP_STATUS_CREATED = 201; //The request has been fulfilled and resulted in the creation of a new resource.
	const HTTP_STATUS_ACCEPTED = 202; //The request has been accepted for processing, but the processing has not been completed.
	const HTTP_STATUS_PARTIAL = 203; //The returned meta information in the entity-header is not the definitive set available from the originating server.
	const HTTP_STATUS_NO_CONTENT = 204; //The server has fulfilled the request, but there is no new information to send back.
	const HTTP_STATUS_RESET_CONTENT = 205; //The request has been completed, and the client program should reset the document view that caused the request to be sent to allow the user to easily initiate another input action.
	const HTTP_STATUS_PARTIAL_CONTENT = 206; //The server has fulfilled the partial GET request for the resource.
	const HTTP_STATUS_WEBDAV_MULTI_STATUS = 207; //During a World Wide Web Distributed Authoring and Versioning (WebDAV) operation, this indicates multiple status codes for a single response. The response body contains Extensible Markup Language (XML) that describes the status codes. For more information, see HTTP Extensions for Distributed Authoring.
	const HTTP_STATUS_AMBIGUOUS = 300; //The requested resource is available at one or more locations.
	const HTTP_STATUS_MOVED = 301; //The requested resource has been assigned to a new permanent Uniform Resource Identifier (URI), and any future references to this resource should be done using one of the returned URIs.
	const HTTP_STATUS_REDIRECT = 302; //The requested resource resides temporarily under a different URI.
	const HTTP_STATUS_REDIRECT_METHOD = 303; //The response to the request can be found under a different URI and should be retrieved using a GET HTTP verb on that resource.
	const HTTP_STATUS_NOT_MODIFIED = 304; //The requested resource has not been modified.
	const HTTP_STATUS_USE_PROXY = 305; //The requested resource must be accessed through the proxy given by the location field.
	const HTTP_STATUS_REDIRECT_KEEP_VERB = 307; //The redirected request keeps the same HTTP verb. HTTP/1.1 behavior.
	const HTTP_STATUS_BAD_REQUEST = 400; //The request could not be processed by the server due to invalid syntax.
	const HTTP_STATUS_DENIED = 401; //The requested resource requires user authentication.
	const HTTP_STATUS_PAYMENT_REQ = 402; //Not implemented in the HTTP protocol.
	const HTTP_STATUS_FORBIDDEN = 403; //The server understood the request, but cannot fulfill it.
	const HTTP_STATUS_NOT_FOUND = 404; //The server has not found anything that matches the requested URI.
	const HTTP_STATUS_BAD_METHOD = 405; //The HTTP verb used is not allowed.
	const HTTP_STATUS_NONE_ACCEPTABLE = 406; //No responses acceptable to the client were found.
	const HTTP_STATUS_PROXY_AUTH_REQ = 407; //Proxy authentication required.
	const HTTP_STATUS_REQUEST_TIMEOUT = 408; //The server timed out waiting for the request.
	const HTTP_STATUS_CONFLICT = 409; //The request could not be completed due to a conflict with the current state of the resource. The user should resubmit with more information.
	const HTTP_STATUS_GONE = 410; //The requested resource is no longer available at the server, and no forwarding address is known.
	const HTTP_STATUS_LENGTH_REQUIRED = 411; //The server cannot accept the request without a defined content length.
	const HTTP_STATUS_PRECOND_FAILED = 412; //The precondition given in one or more of the request header fields evaluated to false when it was tested on the server.
	const HTTP_STATUS_REQUEST_TOO_LARGE = 413; //The server cannot process the request because the request entity is larger than the server is able to process.
	const HTTP_STATUS_URI_TOO_LONG = 414; //The server cannot service the request because the request URI is longer than the server can interpret.
	const HTTP_STATUS_UNSUPPORTED_MEDIA = 415; //The server cannot service the request because the entity of the request is in a format not supported by the requested resource for the requested method.
	const HTTP_STATUS_RETRY_WITH = 449; //The request should be retried after doing the appropriate action.
	const HTTP_STATUS_SERVER_ERROR = 500; //The server encountered an unexpected condition that prevented it from fulfilling the request.
	const HTTP_STATUS_NOT_SUPPORTED = 501; //The server does not support the functionality required to fulfill the request.
	const HTTP_STATUS_BAD_GATEWAY = 502; //The server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request.
	const HTTP_STATUS_SERVICE_UNAVAIL = 503; //The service is temporarily overloaded.
	const HTTP_STATUS_GATEWAY_TIMEOUT = 504; //The request was timed out waiting for a gateway.
	const HTTP_STATUS_VERSION_NOT_SUP = 505; //The server does not support the HTTP protocol version that was used in the request message.
	
	/**
	 * @var int
	 */
	public $code;
	
	/**
	 * @var string
	 */
	public $codeName;
	
	/**
	 * @var array
	 */
	public $headers = array();
	
	/**
	 * @return boolean
	 */
	public function isGoodCode()
	{
		$goodCodes = array(
			self::HTTP_STATUS_OK => true,
			self::HTTP_STATUS_PARTIAL_CONTENT => true,
			self::HTTP_STATUS_REDIRECT => true, 
			self::HTTP_STATUS_MOVED => true,
		);
		
		return isset($goodCodes[$this->code]);
	}
}